%IN:
%czynnosc:

%w zależnosci od parametru czynnosc
%0-zdjecie rezerwacji pola
%1-zajecie pola
%2-sprawdzenie zajetosci pola

%indeks_robota: numer robota ktory chce rezerwowac
%pozycja: macierz pol do rezerwacji w postaci 2 x n gdzie n-ilosc pol
%rezerwowanych. Zwraca 0 jesli co najmniej jedno z pol jest już zajete.

%OUT:
%1-czynnosc zakończona powodzeniem (dla czynnosci==2 oznacza pole wolne)
%0-czynnosc zakończona niepowodzeniem (dla czynnosci==2 oznacza pole zajete)



function obj=rezerwuj(czynnosc,indeks_robota,pozycja)
%funkcja sprawdza czy pole jest zajete przez 
%innego robota, jesli nie
%rezerwuje to pole dla siebie
obj=1;
wszystkie_pola_wolne=0;

if(czynnosc==1) %zadziala tylko gdy rezerwujemy pola
%sprawdza czy wszystkie pola ktore chcemy zarezerwowac sa wolne
%Jesli nie to zwraca ze nie wszystkie pola sa wolne
    wszystkie_pola_wolne=1;
    for (i=1:size(pozycja,1))
        spr=rezerwuj_jedno(2,indeks_robota, [pozycja(i,1), pozycja(i,2) ]);
        if (spr==0)
            wszystkie_pola_wolne=0;
            obj=0;
        end;
    end;
end;


%rezerwuje pola po kolei pod warunkiem,ze można wszystkie zarezerwowac
if (size(pozycja,2)~=0 && (czynnosc==0 | czynnosc==2 | wszystkie_pola_wolne==1) )
    for (i=1:size(pozycja,1))
        
        wynik=rezerwuj_jedno(czynnosc,indeks_robota, [pozycja(i,1), pozycja(i,2) ]);
        if (wynik==0)
            obj=0;
        end;
    end;
end;







function obj=rezerwuj_jedno(czynnosc,indeks_robota,pozycja)
%funkcja sprawdza czy pole jest zajete przez innego robota, jesli nie
%rezerwuje to pole dla siebie

global mapa;

obj=0;

if (mapa(pozycja(1),pozycja(2))<1000) %żeby nie zarezerwowac sciany
 if(mapa(pozycja(1),pozycja(2))==0 |   mapa(pozycja(1),pozycja(2))==indeks_robota)   
      %zdjac rezerwacje z pola może tylko robot ktory to pole zarezerwowal
    switch(czynnosc)
        case 0 %zwalnianie
            mapa(pozycja(1),pozycja(2))=0;
            obj=1;
        case 1;%rezerwacja
            mapa(pozycja(1),pozycja(2))=indeks_robota;
            obj=1;
        case 2;%rezerwacja
            if (mapa(pozycja(1),pozycja(2))==0 |   mapa(pozycja(1),pozycja(2))==indeks_robota)
            obj=1;
            end;
    end;
 end;
end;


